[DL:scratch] 0 - basic python

Deep Learning from scratch : Plan

  1. Basic Python for Deep Learning
    • Deep Learning을 위한 python을 기본적으로 다루는 방법을 배웁니다.
  2. Perceptron
    • Perceptron을 통해 weight와 bias를 배우고 퍼셉트론의 한계, 그리고 다층 perceptron을 다룹니다.
  3. Neural Networks
    • Activation Function과 vector에 대한 계산을 다루며, Neural Network를 직접 구현해봅니다.
  4. Training Neural Networks
    • Neural Network를 학습시키기 위해 필요한 loss function과 간단한 미분/편미분에 대한 설명, 그리고 training algorithm을 구현합니다.
  5. Backpropagation
    • Neural Network를 Training 시키는 방법인 backpropagation에 대해 좀 더 심층적으로 다루고 이를 구현합니다.
  6. Training methods
    • Neural Network를 보다 잘 훈련시키기 위해 사용되어지는 여러가지 훈련방법을 소개하고 적용해봅니다.
  7. Type of Neural Networks
    • 다양한 Neural Network를 살펴보고 어떻게 적용되는지, 어떤 분야에 사용하는지에 대해 알아봅니다.
  8. Deep Learning
    • 여러가지 예제를 통해 직접 Deep Learning 모델을 만들어보고 이를 평가해봅니다.

Basic python for Deep Learning

Deep Learning을 직접 다루어보기 위해 쓰는 programming language는 다양한 것이 있지만, 본 블로그에서는 python을 다루기로 합니다.

Colab

python을 직접 실행하기 위해서도 다양한 방법이 있지만, google에서 지원하는 Colab을 사용하여 브라우저에서 손쉽게 실행할 수 있는 방법을 쓰기로 하겠습니다.

Colab

‘새 노트’를 눌러서 python을 실행시킬 수 있는 창을 띄운 뒤에 단순한 계산을 실행시켜보겠습니다.

simple_sum

1+2를 입력하고 왼쪽의 재생버튼을 누르시면, 3이라는 결과가 하단에 뜨게 됩니다.
화면에서 보시는 것처럼, 1+2를 입력하는 상자안에 입력하는 것을 ‘코드’라 하며, 한줄 뿐만 아니라 여러줄을 입력하여 한번에 실행시킬 수 있습니다.

이제부터는 화면으로 보여드리는 것보다 상자안에 입력할 것을 다음과 같은 포맷으로 보여드릴 예정입니다.

1
2
3
4
1+2
3*8
15/2
5 ** 4

위의 코드를 입력해보시고 결과를 확인해보면 다음과 같은 결과가 나오게 됩니다.

simple_calculations

625는 맨 마지막줄 계산의 결과입니다.
저희가 상단에 써놓았던 모든 수식의 결과를 보려면, 각각 계산의 결과를 ‘변수’라는 것에 저장한 뒤에, 확인하는 작업이 필요합니다. 다음과 같이 코드를 작성하여 봅시다.

1
2
3
4
5
6
7
8
9
a = 1+2
b = 3*8
c = 15/2
d = 5 ** 4

print(a)
print(b)
print(c)
print(d)

그렇다면 다음과 같은 결과가 나오게 됩니다.

using_variations

이와같이 프로그래밍은, ‘변수’라는 것을 선언하고 자신이 원하는 ‘작업’을 ‘변수’안에 저장한 뒤, 그 작업의 결과인 ‘변수’를 출력함으로써 원하는 결과를 얻는 것이라고 볼 수 있습니다.

Type of Data

python 안에서 사용할 수 있는 Data의 type에는 다양한 것들이 있습니다.

여러개의 data를 한줄로 줄세워서 저장할 수 있는 List형
여러개의 data를 key, value로 나누어서 원하는 value를 찾기 위해 key라는 것을 사용할 수 있는 dictionary형
참과 거짓을 뜻하는 bool형이 대표적이며, int, float와 같은 숫자 표현형, 그리고 ‘문자열’을 뜻하는 string형이 있습니다.

직접 결과를 확인해보면서 보도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
a = [0, 1, 2, 3, 4 ,5] # this is list
b = {'zero':0, 'one':1, 'two':2} # this is dictionary
c = True # this is bool
d = 10 # this is int
e = 10. # this is float
f = 'hello' # this is string
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
print(type(f))

type(변수)는 변수의 type이 무엇인지를 확인할 수 있는 코드입니다.
위 코드의 결과는 다음과 같이 나옵니다.

1
2
3
4
5
6
<class 'list'>
<class 'dict'>
<class 'bool'>
<class 'int'>
<class 'float'>
<class 'str'>

list와 dictionary형의 내부에 접근하는 방법은 다음과 같습니다.
먼저 list인 a에서 첫번째 요소인 0에 접근하고 싶을 때와
dictionary안에서 ‘one’라는 key를 통해, 1이라는 value에 접근하고 싶을 때를 확인해보겠습니다.

1
2
3
4
5
6
7
8
a = [0, 1, 2, 3, 4 ,5] # this is list
b = {'zero':0, 'one':1, 'two':2} # this is dictionary
c = True # this is bool
d = 10 # this is int
e = 10. # this is float
f = 'hello' # this is string
print(a[0]) # print first element of list a
print(b['one']) # print value of key 'zero'

위의 코드를 통해 0과 1이라는 결과가 출력되는 것을 확인할 수 있습니다.
a와 b의 데이터를 바꿔보시면서 출력을 해보시거나, 대괄호 안에 들어가는 순서(index)나 key(‘one’)를 바꿔보며 익숙해지는 것이 좋습니다.

If else

~한 조건이 ‘참’일때, ~을 실행하고 싶을 때 쓰는 ‘조건문’입니다.
예를 들어, 사용자가 입력한 숫자가 10보다 작으면, 10보다 작다는 문구를 출력하고, 10이거나 10보다 크면 10보다 크다는 문구를 출력하고 싶다는 프로그램을 짜려면 어떻게 해야할까요?

1
2
3
4
5
number = input()
if number < 10:
print(f'{number} is less than 10')
else:
print(f'{number} is equal with 10 or greater than 10')

즉, if 바로 뒤에 오는 조건이 ‘True’일 경우에는 less than 문구를, False일 경우 그 이외의 경우인 ‘else’가 되어 출력되어지게 됩니다.
만약, 사용자가 입력한 숫자가 10이면, 10입니다. 라고 출력을 하고 싶다면 다음과 같이 조건을 걸어주시면 됩니다.

1
2
3
4
5
6
7
number = int(input())
if number < 10:
print(f'{number} is less than 10')
elif number == 10:
print(f'{number} is equal with 10')
else:
print(f'{number} is greater than 10')

Loop

0부터 9까지 숫자를 출력하고 싶으시다면, print를 여러번 써서 해결할 수도 있지만, 일정의 규칙이 있는 경우라면 loop 문을 쓰실 수 있습니다.

1
2
3
4
5
number = 0
for i in range(0,10):
print(i)
print(number)
number+=1

여기에서 i와 number의 차이는, i는 loop를 얼마나 반복할지를 참고하는 변수라는 것입니다.
원래 출력에서는 i와 number가 계속 같이 1씩 증가하는 모습을 보여주었지만, 만약 저 코드에서 number+=1 부분을 없앤다면 어떻게 될까요? i만 증가하고 number는 0에 멈춰있는 것을 볼 수 있습니다.

Function

위의 if else에서 작성한 코드가 있습니다. 사용자가 입력한 변수가 같으면, 크면, 작으면 ~이다를 출력해주는 작업을 반복하게 되었다고 생각해보면, 저 7줄의 코드를 매번 써줘야 할까요? 한줄로 해결할 수는 없을까요? ‘반복’해서 쓰이지만, 특정 ‘변수’만 달라지는 환경이라면 ‘function’기능을 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

def isTen(number):
if number < 10:
print(f'{number} is less than answer')
return False
elif number == 10:
print(f'answer is : {number}')
return True
else:
print(f'{number} is greater than answer')
return False

for i in range(0,5):
number = int(input())
correct = isTen(number)
if correct:
break # end the loop

위의 코드는 사용자가 10을 입력하면 꺼지는 숫자 맞추기 게임입니다.
기회는 총 5번이 주어지며 (loop 5번) 5번 이내에 맞추면 승리하는 게임입니다.

이처럼 반복해서 필요한 기능들은 ‘function’화 하여서 코드를 더 간결하고 정확하게 만들 수 있습니다.

Class

Share 0 Comments